/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.upc.sad.dao;
import java.util.List;
import java.util.ArrayList;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import pe.edu.upc.sad.model.Empresa;
import pe.edu.upc.sad.model.EmpresaArea;
import pe.edu.upc.sad.model.MensajeResultado;
import pe.edu.upc.sad.model.TipoArea;
import pe.edu.upc.sad.util.BError;
import pe.edu.upc.sad.util.Conexion;
import pe.edu.upc.sad.util.ToolSql;
/**
 *
 * @author HP
 */
public class EmpresaAreaDaoImpl implements EmpresaAreaDao{

    private Statement  st   = null;
    private ResultSet  rs   = null;
    private CallableStatement stmt =null;
    private StringBuffer query = null;
    Connection conn = null;
    private BError error;

    public EmpresaAreaDaoImpl()
    {
      
    }

    @Override
    public int insert(Empresa company, EmpresaArea empresarea) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public MensajeResultado InsertArea(EmpresaArea empresarea) throws SQLException
    {
       int resultado = 0;
        MensajeResultado oResultado =   new MensajeResultado();
       try
        {
          Inicio();

          query.append("{ call USP_INSERT_EMPRESAAREA( ?, ?, ?, ?, ?, ?, ? ) }");
          stmt = conn.prepareCall(query.toString());
          stmt.setString(1,empresarea.getNombre());
          stmt.setString(2,empresarea.getDescripcion());
          stmt.setString(3,empresarea.getImagen() );
          stmt.setDouble(4,empresarea.getPrecio());
          stmt.setString(5,empresarea.getDireccion());
          stmt.setString(6,empresarea.getEmpresa().getRuc());
          stmt.setInt(7,empresarea.getTipoarea().getIdTipoArea());
          stmt.execute();
                oResultado.setESTADO(1);
                oResultado.setMENSAJE("Se Registro el Area correctamente.");
                oResultado.setID_RETURN("1");
                oResultado.setTIPO_RETURN("1");
                oResultado.setDETALLE("");

        }
        catch(Exception e)
        {
            error.setCodError(100);
            error.setMsgError("Error :" + e.getMessage());
            oResultado.setESTADO(0);
            oResultado.setMENSAJE("Se produjo un Error.");
            oResultado.setID_RETURN("1");
            oResultado.setTIPO_RETURN("1");
            oResultado.setDETALLE("Error :" + e.getMessage());
        }
        finally
        {
          //ToolSql.close(null,null,stmt,null );
           ToolSql.close(rs, st, stmt, conn);
        }
        return oResultado;
  }

    @Override
    public List<EmpresaArea> getListAreaEmpresa(int id_tipo, String nombre, int start,int limit,String dir,String Sort) throws Exception {

     List<EmpresaArea> lstAreaEmpresa =null;
        try
        {
             Inicio();

            lstAreaEmpresa = new ArrayList<EmpresaArea>();
           query.append("{ call USP_SELECT_EMPRESAAREA( ?, ?, ?, ?, ?, ? ) }");
            stmt = conn.prepareCall(query.toString());
            stmt.setInt( 1, id_tipo );
            stmt.setString( 2, nombre );
            stmt.setInt( 3, limit );
            stmt.setInt( 4, start );
            stmt.setString( 5, dir );
            stmt.setString( 6, Sort );
            stmt.execute();
            rs = stmt.getResultSet();

            EmpresaArea empresaarea = null;
            Empresa empresa = null;
            TipoArea tipoarea = null;
            while (rs.next())
            {
              empresaarea = new EmpresaArea();
              empresaarea.setIdEmpresaArea(rs.getInt("IdEmpresaArea"));
              empresaarea.setNombre(rs.getString("Nombre"));
              empresaarea.setDescripcion( rs.getString("Descripcion"));
              empresaarea.setImagen(rs.getString("Imagen"));
              empresaarea.setPrecio(rs.getDouble("Precio"));
              empresaarea.setEstado(rs.getInt("Estado"));
              empresaarea.setDireccion(rs.getString("Direccion"));
              empresaarea.setDireccionImagen(rs.getString("DireccionImagen"));

                   tipoarea = new TipoArea();
                   tipoarea.setIdTipoArea(rs.getInt("IdTipoArea"));
                   tipoarea.setDescripcion(rs.getString("DescripcionTipo"));
              empresaarea.setTipoarea(tipoarea);

              empresa = new Empresa();
                  empresa.setRuc(rs.getString("rucempresa"));
                  empresa.setRazonSocial(rs.getString("RazonSocial"));
                  empresa.setDireccion(rs.getString("Direccionempresa"));
                  empresa.setContacto(rs.getString("Contacto"));
                  empresa.setEmail(rs.getString("Email"));
                  empresa.setNroCuenta(rs.getString("NroCuenta"));
              empresaarea.setEmpresa(empresa);

              lstAreaEmpresa.add(empresaarea);
            }

            return  lstAreaEmpresa;
        }catch(Exception e)
        {
            error.setCodError(100);
            error.setMsgError("Error :" + e.getMessage());
             lstAreaEmpresa = new ArrayList<EmpresaArea>();
             return  lstAreaEmpresa;
        }
        finally
        {
            ToolSql.close(rs, st, stmt, conn);
        }

    }

    @Override
    public int getListAreaEmpresaCount(int id_tipo, String nombre) throws Exception {

        try
        {
             Inicio();
            query.append("{ call USP_SELECT_EMPRESAAREACOUNT( ?, ? ) }");
            stmt = conn.prepareCall(query.toString());
            stmt.setInt( 1, id_tipo );
            stmt.setString( 2, nombre );
            stmt.execute();
            rs = stmt.getResultSet();
            int Tot = 0;
            while (rs.next())
            {
              Tot = rs.getInt("TOTAL");
            }
            return  Tot;
        }catch(Exception e)
        {
            error.setCodError(100);
            error.setMsgError("Error :" + e.getMessage());
             return  0;
        }
        finally
        {
            ToolSql.close(rs, st, stmt, conn);
        }

    }

     @Override
    public List<EmpresaArea> getListAreaEmpresa_byEmpresa(String id_empresa) throws Exception {

     List<EmpresaArea> lstAreaEmpresa =null;
        try
        {
             Inicio();
            lstAreaEmpresa = new ArrayList<EmpresaArea>();
           query.append("{ call USP_SELECT_EMPRESAAREA_BY_EMPRESA( ? ) }");
            stmt = conn.prepareCall(query.toString());
            stmt.setString( 1, id_empresa );
            stmt.execute();
            rs = stmt.getResultSet();

            EmpresaArea empresaarea = null;
            Empresa empresa = null;
            TipoArea tipoarea = null;
            while (rs.next())
            {
              empresaarea = new EmpresaArea();
              empresaarea.setIdEmpresaArea(rs.getInt("IdEmpresaArea"));
              empresaarea.setNombre(rs.getString("Nombre"));
              empresaarea.setDescripcion( rs.getString("Descripcion"));
              empresaarea.setImagen(rs.getString("Imagen"));
              empresaarea.setPrecio(rs.getDouble("Precio"));
              empresaarea.setEstado(rs.getInt("Estado"));
              empresaarea.setDireccion(rs.getString("Direccion"));
              empresaarea.setDireccionImagen(rs.getString("DireccionImagen"));

                   tipoarea = new TipoArea();
                   tipoarea.setIdTipoArea(rs.getInt("IdTipoArea"));
                   tipoarea.setDescripcion(rs.getString("DescripcionTipo"));
              empresaarea.setTipoarea(tipoarea);

              empresa = new Empresa();
                  empresa.setRuc(rs.getString("rucempresa"));
                  empresa.setRazonSocial(rs.getString("RazonSocial"));
                  empresa.setDireccion(rs.getString("Direccionempresa"));
                  empresa.setContacto(rs.getString("Contacto"));
                  empresa.setEmail(rs.getString("Email"));
                  empresa.setNroCuenta(rs.getString("NroCuenta"));
              empresaarea.setEmpresa(empresa);

              lstAreaEmpresa.add(empresaarea);
            }

            return  lstAreaEmpresa;
        }catch(Exception e)
        {
            error.setCodError(100);
            error.setMsgError("Error :" + e.getMessage());
             lstAreaEmpresa = new ArrayList<EmpresaArea>();
             return  lstAreaEmpresa;
        }
        finally
        {
            ToolSql.close(rs, st, stmt, conn);
        }

    }

    @Override
    public MensajeResultado DeleteAreaEmpresa(int idEmpresaArea) throws SQLException
    {
       int resultado = 0;
        MensajeResultado oResultado =   new MensajeResultado();
       try
        {
          Inicio();
          query.append("{ call USP_DELETE_EMPRESAAREABYID( ? ) }");
          stmt = conn.prepareCall(query.toString());
          stmt.setInt(1,idEmpresaArea);

          stmt.execute();
            oResultado.setESTADO(1);
            oResultado.setMENSAJE("Se Elimino correctamente.");
            oResultado.setID_RETURN("1");
            oResultado.setTIPO_RETURN("1");
            oResultado.setDETALLE("");

        }
        catch(Exception e)
        {
            error.setCodError(100);
            error.setMsgError("Error :" + e.getMessage());
            oResultado.setESTADO(0);
            oResultado.setMENSAJE("Se produjo un Error.");
            oResultado.setID_RETURN("1");
            oResultado.setTIPO_RETURN("1");
            oResultado.setDETALLE("Error :" + e.getMessage());
        }
        finally
        {
          //ToolSql.close(null,null,stmt,null );
           ToolSql.close(rs, st, stmt, conn);
        }
        return oResultado;
  }
    public void Inicio()
    {
       error = new BError();
       query = new StringBuffer("");
       conn =   Conexion.getConnection();
    }

}
